/**
 * 
 * 如果遇到函数或是类时，如果遇到类型不明确就可以使用泛型
 * 
 */



function fn<k>(a:k):k{
    return a;
}

//可以直接调用具有泛型的函数 
let result = fn(10); //此时ts可以自动推断类型

let result1 = fn<number>(4);// 指定泛型
let result2 = fn<string>('hello');


function fn2<t, k>(a:t,b:k):t{
    console.log(b);
    return a;
}

let result3 = fn2(223,"hello")
let result4 = fn2<number,string>(223,"hello")


interface Inter{
    length: number;
}

function fn3<T extends Inter>(a: T):number{
    return a.length
}

fn3("hello");


class MyClass<T>{
    name: T;
    constructor(name:T){
        this.name = name;
    }
}

const mc = new MyClass<string>("孙悟空")


